1
ローカルオブジェクトの寿命:自動的と静的の比較
AI037Lesson 10
00:00

C++ の世界では、すべてのオブジェクトには寿命があり、それが オブジェクトの寿命という概念です。これは、オブジェクトがメモリ上に存在する期間を定義します。関数の内部では、 関数本体において、 ローカル変数 のデフォルトの振る舞いは 自動的になることです。しかし、 静的 にすることで、その運命を変えることができます。

1. 自動的オブジェクト

デフォルトでは、ローカル変数は 自動的オブジェクトです。これらのオブジェクトは、関数の実行がその定義に到達したときに生成(初期化)され、ブロックの終了時に破棄(回収)されます。 関数 ブロックが完了すると死(回収)します。これらはスタック上に存在するため、関数呼び出し毎に新鮮な状態になります。

2. ローカル静的オブジェクト

あなたが 静的 キーワードを使用すると、 ローカル静的オブジェクトが作成されます。このオブジェクトは、一度だけ初期化され(定義を初めて通る前)、プログラムの終了まで生き続けます。これにより、グローバルスコープを汚すことなく、関数が状態を「記憶」できるようになります。

スタック(自動的)[ 一時値 ]ブロック終了時に破棄データセグメント(静的)[ 永続値 ]プログラム終了まで生存

3. 再帰の罠

再帰関数では、 再帰関数再帰ループ ごとに、自動的オブジェクトの個別のインスタンスが作られます。再帰が深くなると、スタック領域を大幅に消費します。逆に、 静的 オブジェクトは再帰のすべてのレベルで共有されます。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>